package com.xxx.yuedong.community.service;

import com.xxx.yuedong.community.controller.form.DynamicLikeForm;
import com.xxx.yuedong.community.pojo.Dynamic;
import com.xxx.yuedong.community.pojo.DynamicLike;
import com.xxx.yuedong.community.pojo.LikeUser;
import com.xxx.yuedong.common.pojo.PageData;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Set;

/**
 * 点赞业务层接口
 * 之后合并到DynamicService
 *
 * @Author YinXi
 * @Versin 1.0.0
 * @Date 2023/8/7
 */
@Transactional
public interface DynamicLikeService {
    /**
     * 点赞
     */
    void getDynamicLike(DynamicLikeForm form);

    /**
     * 取消点赞
     */
    void outDynamicLike(DynamicLikeForm form);
    /**
     * 获取某一条动态的点赞数
     */
    int countDynamicLike(Long dynamicId);
    /**
     * 获取某一条动态的前四位点赞者
     */
    List<LikeUser> getDynamicLiker(Long dynamicId);
    /**
     * 判断当前用户是否点赞过当前动态
     */
    DynamicLike isDynamicLiker(Long dynamicId,Long userId);
    /**
     * 获取用户的喜欢列表
     */
    List<Dynamic> dynamicLists(Long userId);
    /**
     * 重建DynamicLikeForm相关的缓存列表
     */
    void rebulidDynamicLikeCache();
    /**
     * 判断是否在Redis中存在用户的喜欢列表
     */
    boolean isDynamicLikeList(Long userId);
    /**
     * 加载用户的喜欢列表
     */
    void buildDynamicLikeList(Long userId);
    /**
     * 分页加载用户的喜欢列表
     */
    PageData<Dynamic> list(Integer pageNum,Long userId);
    /**
     * 获取当前Redis缓存中的喜欢列表的key
     */
    Set<String> getDynamicLikeKeys(String pattern);

    /**
     * 重构喜欢列表的缓存
     */
    void rebulidDynamicCache(Set<String> list);
}
